#include "at32f415_encoder_driver.h"

gpio_init_type gpio_init_struct = {0};

AT32F415GPIO encoder_0={
    .port = GPIOA,
    .crm_clk_type = CRM_GPIOA_PERIPH_CLOCK,
    .gpio_init_struct ={
        .gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER,
        .gpio_out_type  = GPIO_OUTPUT_OPEN_DRAIN,
        .gpio_mode = GPIO_MODE_INPUT,
        .gpio_pins = GPIO_PINS_15,
        .gpio_pull = GPIO_PULL_UP,
    }
};
AT32F415GPIO encoder_1={
    .port = GPIOB,
    .crm_clk_type = CRM_GPIOB_PERIPH_CLOCK,
    .gpio_init_struct ={
        .gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER,
        .gpio_out_type  = GPIO_OUTPUT_OPEN_DRAIN,
        .gpio_mode = GPIO_MODE_INPUT,
        .gpio_pins = GPIO_PINS_3,
        .gpio_pull = GPIO_PULL_UP,
    }
};
AT32F415GPIO encoder_2={
    .port = GPIOB,
    .crm_clk_type = CRM_GPIOB_PERIPH_CLOCK,
    .gpio_init_struct ={
        .gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER,
        .gpio_out_type  = GPIO_OUTPUT_OPEN_DRAIN,
        .gpio_mode = GPIO_MODE_INPUT,
        .gpio_pins = GPIO_PINS_4,
        .gpio_pull = GPIO_PULL_UP,
    }
};
AT32F415GPIO encoder_3={
    .port = GPIOB,
    .crm_clk_type = CRM_GPIOB_PERIPH_CLOCK,
    .gpio_init_struct ={
        .gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER,
        .gpio_out_type  = GPIO_OUTPUT_OPEN_DRAIN,
        .gpio_mode = GPIO_MODE_INPUT,
        .gpio_pins = GPIO_PINS_5,
        .gpio_pull = GPIO_PULL_UP,
    }
};
AT32F415GPIO encoder_4={
    .port = GPIOB,
    .crm_clk_type = CRM_GPIOB_PERIPH_CLOCK,
    .gpio_init_struct ={
        .gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER,
        .gpio_out_type  = GPIO_OUTPUT_OPEN_DRAIN,
        .gpio_mode = GPIO_MODE_INPUT,
        .gpio_pins = GPIO_PINS_6,
        .gpio_pull = GPIO_PULL_UP,
    }
};
AT32F415GPIO encoder_5={
    .port = GPIOB,
    .crm_clk_type = CRM_GPIOB_PERIPH_CLOCK,
    .gpio_init_struct ={
        .gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER,
        .gpio_out_type  = GPIO_OUTPUT_OPEN_DRAIN,
        .gpio_mode = GPIO_MODE_INPUT,
        .gpio_pins = GPIO_PINS_7,
        .gpio_pull = GPIO_PULL_UP,
    }
};
AT32F415GPIO encoder_6={
    .port = GPIOB,
    .crm_clk_type = CRM_GPIOB_PERIPH_CLOCK,
    .gpio_init_struct ={
        .gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER,
        .gpio_out_type  = GPIO_OUTPUT_OPEN_DRAIN,
        .gpio_mode = GPIO_MODE_INPUT,
        .gpio_pins = GPIO_PINS_8,
        .gpio_pull = GPIO_PULL_UP,
    }
};
AT32F415GPIO encoder_7={
    .port = GPIOB,
    .crm_clk_type = CRM_GPIOB_PERIPH_CLOCK,
    .gpio_init_struct ={
        .gpio_drive_strength = GPIO_DRIVE_STRENGTH_STRONGER,
        .gpio_out_type  = GPIO_OUTPUT_OPEN_DRAIN,
        .gpio_mode = GPIO_MODE_INPUT,
        .gpio_pins = GPIO_PINS_9,
        .gpio_pull = GPIO_PULL_UP,
    }
};

void encoder_init(void)
{
	gpio_pin_remap_config(SWJTAG_GMUX_010, TRUE);
    gpio_init_pin(&encoder_0);
    gpio_init_pin(&encoder_1);
    gpio_init_pin(&encoder_2);
    gpio_init_pin(&encoder_3);
    gpio_init_pin(&encoder_4);
    gpio_init_pin(&encoder_5);
    //gpio_init_pin(&encoder_6);
    //gpio_init_pin(&encoder_7);
}

uint32_t get_encoder_cnt()
{
	uint8_t code=0;
	if(0)//gpio_getpin(&encoder_7)==1)
	{
		code |=0x01;
	}
	code = code <<1;
	if(0)//gpio_getpin(&encoder_6)==1)
	{
		code |=0x01;
	}
	code = code <<1;
	if(gpio_getpin(&encoder_5)==1)
	{
		code |=0x01;
	}
	code = code <<1;
	if(gpio_getpin(&encoder_4)==1)
	{
		code |=0x01;
	}
	code = code <<1;
	if(gpio_getpin(&encoder_3)==1)
	{
		code |=0x01;
	}
	code = code <<1;
	if(gpio_getpin(&encoder_2)==1)
	{
		code |=0x01;
	}
	code = code <<1;
	if(gpio_getpin(&encoder_1)==1)
	{
		code |=0x01;
	}
	code = code <<1;
	if(gpio_getpin(&encoder_0)==1)
	{
		code |=0x01;
	}
    return code;
}